
'''
对于下面这个整数列表

[1, 2, 3, 3, 4, 0, 10, 6, 5, -1, -3, 2, 3]
                   ^

Task 1: 找到这个列表中的所有波峰

波峰 - 如果列表中的某个数字，它左右的数字都小于它，我们管这样的数字叫波峰

Task 2: 用一个整数返回最长的波峰的长度

3, 4, 0 - 波峰 4 的长度是 3
0, 10, 6, 5, -1, -3 - 波峰 10 的长度是 6
'''

# peaks([1, 2, 3, 3, 4, 0, 10, 6, 5, -1, -3, 2, 3]) -> [4, 10]
# def peaks(numbers):

# longest_peaks([1, 2, 3, 3, 4, 0, 10, 6, 5, -1, -3, 2, 3]) -> 6
#                            l                       r r - l + 1 - 2
def longest_peak(numbers):
  result = 0 # 保存计算出来的波峰的长度

  # 找波峰
  i = 1
  while i < len(numbers) - 1:
    is_peak = numbers[i - 1] < numbers[i] and numbers[i + 1] < numbers[i]

    if not is_peak:
      i += 1
      continue

    # 执行到这里，表示我们找到了一个波峰的位置 i
    # 就要分别从 i 的位置开始先向左一直延伸，延伸到不能延伸为止 l
    l = i - 2
    while l >= 0 and numbers[l] < numbers[l + 1]:
      l -= 1

    #从 i 的位置再向右一直延伸，延伸到不能延伸为止 r
    r = i + 2
    while r <= len(numbers) - 1 and numbers[r] < numbers[r - 1]:
      r += 1

    curr_length = r - l + 1 - 2
    result = max(result, curr_length)
    i = r

  return result
